const joi = require("joi");

// username表示：1. 必须是字符串类型 2. 必须是字母或数字 3. 必须是1-10个字符 4. 必须是必填项 5. 不能包含空格
const username = joi
  .string()
  .alphanum() // 只能是字母和数字
  .min(1) // 最小长度1
  .max(10) // 最大长度10
  .pattern(/^\S*$/) // 不能包含空格
  .required(); // 必填项

// password表示：1. 必须是字符串类型 2. 必须是字母或数字 3. 必须是6-12个字符 4. 必须是必填项 5. 不能包含空格
const password = joi
  .string()
  .pattern(/^[\S]{6,12}$/) // 不能包含空格
  .required();

// email表示：1. 必须是字符串类型 2. 必须是邮箱格式
const email = joi.string().email().optional().allow(""); // 允许为空字符串

// nickname表示：1. 必须是字符串类型 2. 必须是字母或数字 3. 必须是1-10个字符 4. 不能包含空格
const nickname = joi
  .string()
  .alphanum() // 只能是字母和数字
  .min(1) // 最小长度1
  .max(10) // 最大长度10
  .pattern(/^\S*$/) // 不能包含空格
  .allow("") // 允许为空字符串
  .optional(); // 可选项--字段是否存在
// 注册和登录表单的验证规则对象
exports.reg_login_schema = {
  body: {
    username,
    password,
    nickname,
    email,
  },
};
exports.updatePwd_schema = {
  oldPassword: password,
  // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
  // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
  // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
  newPassword: joi.not(joi.ref("oldPassword")).concat(password),
};
